home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / PowerPC / vbcc / machines / amigawos / libsrc / stdio / _open.c < prev    next >
C/C++ Source or Header  |  1998-08-02  |  1KB  |  60 lines

  1. /*
  2. ** vbcc-PowerOpen/WarpOS Lowlevel open() function
  3. **
  4. ** v0.1 31.07.98 phx
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <errno.h>
  9.  
  10. #include <dos/dos.h>
  11. #include <powerpc/powerpc.h>
  12. #include <clib/powerpc_protos.h>
  13.  
  14. extern APTR DOSBase;
  15. extern LONG __WarpIsInteractive(BPTR);
  16.  
  17.  
  18. char *_open(char *f,const char *name,long mode)
  19. {
  20.   struct PPCArgs pa;
  21.   char *fh;
  22.  
  23.   if (!f) {
  24.     errno = EBADF;
  25.     return (NULL);
  26.   }
  27.   switch (mode) {
  28.     case 0:
  29.       mode = MODE_OLDFILE;
  30.       break; 
  31.     case 1:
  32.       mode = MODE_NEWFILE;
  33.       break; 
  34.     case 2:
  35.       mode = MODE_READWRITE;
  36.       break; 
  37.     default:
  38.       errno = EINVAL;
  39.       return (NULL);
  40.   }
  41.  
  42.   pa.PP_Code = DOSBase;
  43.   pa.PP_Offset = -30;  /* _LVOOpen */
  44.   pa.PP_Flags = pa.PP_StackSize = 0;
  45.   pa.PP_Stack = NULL;
  46.   pa.PP_Regs[PPREG_D1] = (ULONG)name;
  47.   pa.PP_Regs[PPREG_D2] = (ULONG)mode;
  48.   pa.PP_Regs[PPREG_A6] = (ULONG)DOSBase;
  49.   Run68k(&pa);
  50.   if (!(fh = (char *)pa.PP_Regs[PPREG_D0])) {
  51.     errno = ENOENT;
  52.     return (NULL);
  53.   }
  54.  
  55.   ((FILE *)f)->filehandle = fh;
  56.   if (__WarpIsInteractive((BPTR)fh))
  57.     ((FILE *)f)->flags |= _LINEBUF;
  58.   return (fh);
  59. }
  60.